﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//----Añado librerías necesarias
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Configuration;

namespace Librerias
{
    #region excepciones
    //Excepciones CADCursar

    public class Excepcion_AsignaturaRepetida : Exception { public override string ToString() { return "El alumno ya se ha matriculado de esa asignatura"; } }

    #endregion

    /// <summary>
    /// Clase que persiste los Objetos Cursar
    /// </summary>
    public class CADCursar
    {
        SqlConnection c;
        CADGestionDropbox drop;
        #region interfaz

        #region CADCursar
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public CADCursar()
        {
        }
        #endregion

        /// <summary>
        /// Persiste en Evaluar una EN Cursar
        /// </summary>
        /// <param name="cursar">EN Cursar</param>
        public void Evaluar(ENCursar cursar)
        {

            int res = 0;
            c = new SqlConnection(CADConexion.connString);
            try
            {
                if (EsYaMatriculadoEnEstaAsignatura(cursar.Correo, cursar.Codigo) == true)
                {
                    throw new Excepcion_AsignaturaRepetida();
                }
                else
                {

                    string select= "update cursar set curNotaTeoria = " + cursar.NotaTeoria.ToString().Replace(",",".")
                                 + ", curNotaPractica = " + cursar.NotaPractica.ToString().Replace(",",".")
                                 + ", curNotaFinal = " + cursar.NotaFinal.ToString().Replace(",", ".")
                                 + " where curCorreo = '" + cursar.Correo
                                 + "' and curCodigo = '" + cursar.Codigo + "'";

                    c.Open();
                    SqlCommand com = new SqlCommand(select, c);
                    res = com.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message);
            }
            finally
            {
                c.Close();
                c.Dispose();
            }
        }


        #region AltaCursar
        /// <summary>
        /// Persiste una EN Cursar
        /// </summary>
        /// <param name="Cursar">EN Cursar</param>
        public void AltaCursar(ENCursar Cursar)
        {
            int res = 0;
            c = new SqlConnection(CADConexion.connString);
            try
            {
                if (EsYaMatriculadoEnEstaAsignatura(Cursar.Correo, Cursar.Codigo) == true)
                {
                    throw new Excepcion_AsignaturaRepetida();
                }
                else
                {

                    c.Open();
                    SqlCommand com = new SqlCommand("insert into cursar (curCorreo,curCodigo, curAnyo) values('" +
                                                    Cursar.Correo + "','" +
                                                    Cursar.Codigo + "','" +
                                                    Cursar.Anyo + "');", c);
                    res = com.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new System.Exception("Error al insertar en la tabla 'cursar'\n" + ex.Message);
            }
            finally
            {
                c.Close();
                c.Dispose();
            }


        }

        #endregion

        #region BorraCursar
        /// <summary>
        /// Borra un Cursar de la BD
        /// </summary>
        /// <param name="Cursar">EN Cursar a borrar</param>
        public void BorraCursar(ENCursar Cursar)
        {
            int res = 0;
            SqlConnection c = new SqlConnection(CADConexion.connString);
            try
            {
                c.Open();
                SqlCommand com = new SqlCommand("delete from cursar where(curCorreo= '" + Cursar.Correo +
                                                "'and curCodigo= '" + Cursar.Codigo + "')",c);
                res = com.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new System.Exception("Error al eliminar en la tabla " + ex.Message);
            }
            finally
            {

                c.Close();
            }
        }
        #endregion

        #region EstaYaMatriculadoEnEstaAsignatura
        /// <summary>
        /// Nos dirá si esta ya matriculado en la asignatura
        /// </summary>
        /// <param name="alumnoAComprobar">alumno a comprobar</param>
        /// <param name="asignaturaAComprobar">asignatura a comprobar</param>
        /// <returns>V si lo está F en lo contrario</returns>
        public bool EsYaMatriculadoEnEstaAsignatura(string alumnoAComprobar, string asignaturaAComprobar)
        {
            bool salida = false;                                //devuelve si lo es o no
            SqlConnection c = null;                             // Variable de conexión a la DB
            SqlCommand command = null;                          // Variable para la ejecución de comandos
            SqlDataReader reader = null;                        // Almacenador de datos obtenidos
            string query = string.Empty;                        // Instrucción a ejecutar
            List<string> listado = new List<string>();          // Listado de correos capturados

            query = "select curCorreo from cursar, asignatura where ((curCorreo='" + alumnoAComprobar + "') " +
                                                             "and (curCodigo=asignatura.asiCodigo) and (asignatura.asiNombre='" + asignaturaAComprobar + "'));";

            try
            {
                // Establecimiento de conexión
                c = new SqlConnection(CADConexion.connString);
                c.Open();

                // Ejecución de la instrucción
                command = new SqlCommand(query, c);
                reader = command.ExecuteReader();

                // Recorrido de los datos obtenidos
                while (reader.Read())
                {
                    string clavecita;

                    clavecita = reader["curCorreo"].ToString();

                    listado.Add(clavecita);
                }

                if (listado.Capacity != 0)
                    //el alumno ya estará cursando la asignatura
                    //si lo encuentra
                    salida = true;
                else
                    //el alumno no estará cursando la asignatura -> podemos insertar
                    salida = false;

            }
            catch (Exception)
            {
                throw;
            }

            finally
            {
                // Comprobación de conexión abierta
                if ((c != null) && (c.State == ConnectionState.Open))
                {
                    c.Close();
                }
            }

            return salida;
        }
        #endregion

        /// <summary>
        /// Nos devuelve todas las notas de cursar
        /// </summary>
        /// <returns>DataTable con todas</returns>
        public DataTable ConsultaNotas()
        {
            c = new SqlConnection(CADConexion.connString);
            DataTable res = new DataTable();

            try
            {
                c.Open();
                string select = "select * from cursar";

                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                adaptadorSQL.Fill(res);

            }
            catch (SqlException ex)
            {
                res = null;
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return res;
        }

          /// <summary>
          /// Consulta las notras dada una asignatura, una cadena de búsqueda, un criterio de búsqueda
          /// </summary>
          /// <param name="asig">asignatura</param>
          /// <param name="cadena">cadena de búsqueda</param>
          /// <param name="tipo">tipo</param>
          /// <returns></returns>
          public DataTable ConsultaNotas(string asig, string cadena, int tipo)
          {
              c = new SqlConnection(CADConexion.connString);
              DataTable res = new DataTable();

              try
              {
                  c.Open();
                  string select = "select * from usuario,cursar where (curCodigo='" + asig + "') and (usuCorreo=curCorreo)";

                  switch (tipo)
                  {
                      case 0:
                          select += " and usuCorreo like '%" + cadena + "%'";
                          break;
                      case 1:
                          select += " and usuNombre like '%" + cadena + "%'";
                          break;
                      case 2:
                          select += " and usuApellido1 like '%" + cadena + "%'";
                          break;
                      case 3:
                          select += " and usuApellido2 like '%" + cadena + "%'";
                          break;
                                       
                  }

                  SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                  adaptadorSQL.Fill(res);

              }
              catch (SqlException ex)
              {
                  res = null;
                  throw ex;
              }
              finally
              {
                  c.Close();
              }

              return res;
          }

          /// <summary>
          /// Nos dice los alumnos que cursan una asignatura
          /// </summary>
          /// <param name="asig">asignatura</param>
          /// <returns>DataTable con todos</returns>
          public DataTable ConsultaAlumnosPorAsignatura(string asig)
          {
              c = new SqlConnection(CADConexion.connString);
              DataTable res = new DataTable();
              try
              {
                  c.Open();
                  string select = "select * from usuario,cursar where (curCodigo='" + asig + "') and (usuCorreo=curCorreo);";

                  SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                  adaptadorSQL.Fill(res);

              }
              catch (SqlException ex)
              {
                  res = null;
                  throw ex;
              }
              finally
              {
                  c.Close();
              }

              return res;
          }

          public DataTable ConsultaNotasPorAlumnoNoVacias(string correo)
          {
              c = new SqlConnection(CADConexion.connString);
              DataTable res = new DataTable();
              try
              {
                  c.Open();
                  string select = "select * from cursar where (curCorreo='" + correo + "') and ((curNotaPractica is not null) or (curNotaTeoria is not null) or (curNotaFinal is not null));";

                  SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                  adaptadorSQL.Fill(res);

              }
              catch (SqlException ex)
              {
                  res = null;
                  throw ex;
              }
              finally
              {
                  c.Close();
              }

              return res;
          }

          public DataTable ConsultaNotasPorAlumno(string correo)
          {
              c = new SqlConnection(CADConexion.connString);
              DataTable res = new DataTable();
              try
              {
                  c.Open();
                  string select = "select * from cursar where (curCorreo='" + correo + "');";

                  SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                  adaptadorSQL.Fill(res);

              }
              catch (SqlException ex)
              {
                  res = null;
                  throw ex;
              }
              finally
              {
                  c.Close();
              }

              return res;
          }



     public DataTable GetAsignaturasAlumno(string alu)
        {
            DataTable res = null;
            SqlConnection c = new SqlConnection(CADConexion.connString);
            try
            {
                c.Open();
                string select = "select curCodigo from cursar where curCorreo= '" + alu + "'";
                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                res = new DataTable();
                adaptadorSQL.Fill(res);
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return res;

        }


     public DataTable ConsultaNotasPuestasPorProfesor(string correo)
     {
         c = new SqlConnection(CADConexion.connString);
         DataTable res = new DataTable();
         try
         {
             c.Open();
             string select = "select * from cursar,turno where (turCorreo='" + correo + "')and(curCodigo=turCodigo) order by curCodigo;";

             SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
             adaptadorSQL.Fill(res);

         }
         catch (SqlException ex)
         {
             res = null;
             throw ex;
         }
         finally
         {
             c.Close();
         }

         return res;
     }

}
        #endregion
}

